const express = require('express');
const multer = require('multer');
const COS = require('cos-nodejs-sdk-v5');
const cors = require('cors'); // 引入cors中间件
const path = require('path');

const app = express();
const port = 3000;

// 初始化COS实例
const cos = new COS({
  SecretId: "AKIDMn37yd51oNjroY4MRIyQeiieRPCmFWbU", // 推荐使用环境变量获取；用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
  SecretKey: "lKhsrfHLG2c0B9uRuncEqFXwLadS6Ynp", // 推荐使用环境变量获取；用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
});

// 配置multer存储引擎
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 配置cors中间件
app.use(cors({
  origin: 'http://127.0.0.1:5500', // 允许来自该源的请求
  methods: 'POST', // 允许的HTTP方法
  allowedHeaders: ['Content-Type'] // 允许的请求头
}));

// 文件上传接口
app.post('/upload', upload.single('file'), (req, res) => {
  if (!req.file) {
    return res.status(400).send('请选择一个文件');
  }

  const file = req.file;
  const bucketName = 'yu-picture-1354705769'; // 替换为你的存储桶名称
  const region = 'ap-shanghai'; // 替换为你的存储桶所在地域
  const objectKey = file.originalname; // 使用文件名作为存储桶中的对象键

  cos.putObject({
    Bucket: bucketName, /* 必须 */
    Region: region,     /* 存储桶所在地域，必须字段 */
    Key: objectKey,              /* 必须 */
    Body: file.buffer, // 上传文件对象
    onProgress: function(progressData) {
      console.log(JSON.stringify(progressData));
    }
  }, function(err, data) {
    if (err) {
      console.log(err);
      res.status(500).send('上传失败: ' + err.message);
    } else {
      console.log(data);
      res.status(200).send('上传成功');
    }
  });
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}`);
});